package jmine.tec.report;

import java.util.Map;

import jmine.tec.report.impl.SimpleDataColumn;
import jmine.tec.report.metadata.ColumnMetaData;

/**
 * Um DataColumn representa uma informação que se deseja exibir.
 * 
 * @author julien
 * @author pedro última modificação: 16/02/2007 Pedro e Julien
 */
public interface DataColumn {

    /**
     * Devolve um id para esta coluna. Este id será utilizado para localizar a coluna no Map de colunas disponíveis do sistema.
     * 
     * @return String
     */
    String getKey();

    /**
     * Retorna o nome (ou código de bundle) deste DataColumn.
     * 
     * @return String
     */
    String getName();

    /**
     * Retorna um view deste DataColumn sem referências para objetos do Modelo
     * 
     * @param params mapa com os parametros
     * @return DataColumn
     */
    SimpleDataColumn getView(Map<String, Object> params);

    /**
     * @return <code>true</code> se a coluna pode ser ordenada.
     */
    boolean isSortable();

    /**
     * Pega a metadata desta coluna, que descreve os parametros desta coluna.
     * 
     * @return {@link ColumnMetaData}
     */
    ColumnMetaData getMetaData();

    /**
     * Pega o valor default para um parametro, se houver.
     * 
     * @param parameterKey {@link String} a chave do parametro
     * @return {@link Object}
     */
    Object getDefaultParameterValue(String parameterKey);

}
